////map的使用
//#include <iostream>
//#include <map>
//#include <stdexcept>
//using namespace std;
//
//class Student {
//public:
//	Student(const string& name = "", int age = 0) :m_name(name), m_age(age) {}
//private:
//	string m_name;
//	int m_age;
//	friend ostream& operator<<(ostream& os, const Student& stu);
//};
//ostream& operator<<(ostream& os, const Student& stu) {
//	return os << stu.m_name << ":" << stu.m_age;
//}
//
//void print(map<string, Student>& m) {
//	typedef map<string, Student>::iterator IT;
//	for (IT it = m.begin(); it != m.end(); ++it) {
//		cout << (*it).first << ':' << (*it).second << endl;
//	}
//	cout << "-----------------" << endl;
//}
//
//int main(void) {
//	//创建map
//	//1.创建空的map
//	//map<string, Student> m1;
//	//2.使用初始化列表指定初始值
//	map<string, Student> m2{
//		{"1005",{"张飞",25}},
//		{"1002",{"赵云",27}},
//		{"1010",{"关羽",30}}
//	};
//	print(m2);
//	//3.用现有容器创建
//	map<string, Student> m3{ m2 };
//	print(m3);
//
//	map<string, Student> m4{ ++m2.begin(),--m2.end() };
//
//	//插入
//	m2.insert(pair<string, Student>("1001", Student("刘备", 400)));
//	m2.insert(make_pair("1011", Student("诸葛亮", 35)));
//	m2.insert({ {"1007",Student("周瑜",28)},{"1003",Student("马超",30)} });
//	//key:存在：什么都不做， key不存在：插入
//	m2["1012"] = Student("司马懿", 36);//key存在:修改，key:不存在：插入
//	print(m2);
//
//	//访问  反向迭代器
//	typedef map<string, Student>::reverse_iterator RIT;
//	RIT rit = m2.rbegin();
//	cout << "使用迭代器获取元素" << endl;
//	cout << (*rit).first << ":" << (*rit).second << endl;
//	cout << "========使用键获取对应的值=========" << endl;
//	//Student stu = m2["1006"];//key存在：返回值 key:不存在：添加
//	try {
//		Student stu = m2.at("1006");
//
//	}
//	catch (out_of_range& e) {
//		cerr << e.what() << endl;
//		cout << "不存在学会为1006的学生"<< endl;
//
//	}
//	print(m2);
//
//	//删除
//	cout << "---------------------根据key删除---------" << endl;
//	if (m2.erase("1006")) {
//		cout << "1006被删除" << endl;
//	}
//	else {
//		cout << "不存在 " << endl;
//	}
//	typedef map<string, Student>::iterator IT;
//	cout << "-------根据迭代器删除--------" << endl;
//	IT it = m2.erase(m2.begin());
//	if (it == m2.end()) {
//		cout << "第一个元素被删除" << endl;
//	}
//	else
//		cout << "位于" << it->first << "前面的元素被删除" << endl;
//	print(m2);
//
//	//查找
//	IT fit = m2.find("1007");
//	if (fit == m2.end()) {
//		cout << "1007不存在" << endl;
//	}
//	else {
//		cout << "找到1007" << fit->second << endl;
//	}
//	return 0;
//}